Precisione dei numeri floats

A seguito di un paio di domande fatte a lezione, vediamo la precisione dei numeri "reali" in Python.

I float in python corrispondono ai double in C e quindi sono numeri in doppio precisione, e occupano in memoria 64 bits. Questo comporta un errore di precisione che deve essere considerato in quei ambiti in cui è richiesta un'alta precisione numerica. Per esempio, si dovrebbe ricordare che:


In [ ]:
0.1+0.1+0.1-0.3

ovvero la differenza non è nulla. Questo va considerato soprattutto quando si effetuano dei confronti tra due numeri float:


In [ ]:
0.1 + 0.1 + 0.1 == 0.3

Se viene richiesta una precionse più alta si possono utilizzare due librerie diverse:

Vediamo un esempio per la seconda libreria.


In [ ]:
from fractions import Fraction
a = Fraction(1,10)
b = Fraction(1,10)
c = Fraction(1,10)
d = Fraction(3,10)
a + b + c - d == 0

Divisione tra numeri interi

In python esistono due operatori per effettuare la divisione tra due numeri $a$ e $b$:

  1. \ effettua la divisione come una "normale" calcolatrice (a meno della precisione numerica)
  2. \\ viene chiamato il floor division operator ed effettua la divisione "intera", ovvero $\lfloor \frac{a}{b} \rfloor$

In [ ]:
a = 2.41
b = 2.42
print(a/b)
print(a//b)
print(b//a)

Sympy: Matematica simbolica

Sympy è una libreria Python per effettuare dei calcoli matematici simbolici. Per un approfondimento su come è stata sviluppata questa libreria si consiglia di leggere l'articolo SymPy: symbolic computing in Python o direttamente la documentazione della libreria.

Seguono un paio di esempi per rendere l'idea di cosa si può calcolare con Sympy.


In [ ]:
from sympy import *
x,y = symbols('x y')
init_printing(use_unicode=True)

In [ ]:
diff(sin(x)*exp(-x**2), x)

In [ ]:
integrate(cos(x), (x,0,3))

Accesso al file system

Nel notebook è sempre possibile accedere al file system usando i commandi linux.

ESEMPIO:


In [1]:
ls


 Volume in drive E is DATA
 Volume Serial Number is D299-FD79

 Directory of E:\GitHub\Programmazione2

16/03/2017  10:54    <DIR>          .
16/03/2017  10:54    <DIR>          ..
16/03/2017  10:38               163 .gitignore
14/03/2017  08:36    <DIR>          .ipynb_checkpoints
09/03/2017  17:26             9,610 Appunti vari.ipynb
16/03/2017  09:43    <DIR>          Assignments
16/03/2017  10:14    <DIR>          data
09/03/2017  17:08            19,558 Introduzione a Python - Parte seconda.ipynb
16/03/2017  10:54            20,950 Introduzione a Python - Parte terza.ipynb
09/03/2017  13:32            17,140 Introduzione a Python - Prima parte.ipynb
14/03/2017  08:23            10,319 Lab 1 - Esercizi su semplici algoritmi numerici.ipynb
09/03/2017  13:32             1,088 LICENSE
09/03/2017  13:32               271 README.md
               8 File(s)         79,099 bytes
               5 Dir(s)  288,014,188,544 bytes free

In [2]:
cd ..


E:\GitHub

In [3]:
cd Programmazione2/


E:\GitHub\Programmazione2

In [ ]: